$(function(){

    var bgobj = chrome.extension.getBackgroundPage();   // backgroundページを保持する

    // ログイン情報を保持
    var account = Account.getLoginInfo();
    
    console.log("アカウント情報=" + JSON.stringify(account));

    // タイムライン更新頻度を保持
    var updateInterval = localStorage["shovel.interval"]||DEF_UPD_INTERVAL;

    // TODO 最後に取得したつぶやきすら過去の場合は再帰処理する必要あり
    var fetch = function() {
    
        if (!account) return;

        // 通知設定がOFFなら何もしない
        var isNotify = !(!(localStorage["shovel.isNotify"]||""));
        if (!isNotify) { return false; }
        
        console.log("最新のつぶやきを取得");

        // 通知表示時間
        var notifyWait = localStorage["shovel.notifyWait"]||DEF_NOTIFY_WAIT;

        Ajax.send(
              "/statuses/friends_timeline.xml"
            , {}
            , {"count": 20}
            , function (responseXML) {

                // 最終投稿日時を取得
                var lastUpdate = new Date(localStorage["shovel.lastUpdate"]||"1900-01-01");
                console.log("最終投稿日時=" + lastUpdate.formatJa());
                
                var $statuses = $("status", responseXML);
                if ($statuses.size() <= 0) {return;}

                var updateList = [];

                // 新しい順に精査
                for (var i=0, l=$statuses.size(); i<l; i++) {
                
                    var created_at = new Date($("created_at", $statuses[i]).text());
                    
                    console.log(i + ": 投稿日時=" + created_at.formatJa());
                
                    // 最終投稿日時より古いものは無視
                    if (created_at.getTime() <= lastUpdate.getTime()) {
                        break;
                    }
                    
                    // 最終投稿日時よりも新しければリストに追加
                    updateList.push($statuses[i]);
                }

                // 最終投稿日時を保持
                localStorage["shovel.lastUpdate"] = new Date($("created_at", $statuses[0]).text());
                
                if (updateList.length > 0) {
                
                    // 受け渡し用プロパティにタイムラインを設定
                    bgobj.updateList = updateList;

                    // 拡張機能のアイコンバッジを設定
                    chrome.browserAction.setBadgeBackgroundColor({color: [255, 0, 0, 70]});
                    chrome.browserAction.setBadgeText({text: '!'});

                    // デスクトップ通知を表示
                    $.fn.desktopNotify({timeout : notifyWait});
                }
             }
        );
    }

    // デスクトップ通知の認証
    if (webkitNotifications.checkPermission() !== 0) {
        webkitNotifications.requestPermission();
    }

    fetch(); // 初回チェック

    // 一定間隔ごとにチェック
    setInterval(fetch, updateInterval);
});
